#ifndef INTERNALSTRUCT_H
#define INTERNALSTRUCT_H

#include "Common\stdafx.h"
#include "Common\WrapperPtr.h"
#include "Node\Common\ExecuteContext.h"

namespace CExpression
{
	struct InternalStruct
	{
		friend class Expression;
		friend class VariableNode;
	private:
		InternalStruct():rootPtr(),variableNodes(),executeContext(),resultType(ExecuteRunTimeType::None),executed(false),errorOccured(false),errMsg(){}
		std::shared_ptr<Node> rootPtr;
		std::shared_ptr< std::map< ExpressionString,std::shared_ptr<VariableNode> > > variableNodes;
		WrapperPtr<ExecuteContext> executeContext;
		ExecuteRunTimeType resultType;
		bool executed;
		bool errorOccured;
		ExpressionString errMsg;
	};
}

#endif